Home Posts About

Listen music with emms in Emacs

Table of Contents

Emacs 再一次展现了其强大的功能,播放音乐不在话下。

有一个网易云音乐的插件可以使用,但是作者估计是不使用了,有很长时间没有更新。网易云音乐本身的 API 有所变更,导致该插件不可以使用,很是遗汗。

只好另找方法管理音乐。当前我使用 Telegram 中的 bot 查找音乐,然后使用 Emms 听音乐。

Emms 的配置如下,使用了三个插件,emms lyrics-fetcher 和 consult-emms.

(use-package emms
  :bind (("<f5>" . emms)
         ("C-<f5>" . my/toggle-emms))
  :config
  (setq emms-directory (expand-file-name "cache/emms" user-emacs-directory))
  (setq emms-player-list '(emms-player-mpv))
  (setq emms-browser-covers #'emms-browser-cache-thumbnail-async)
  (setq emms-playlist-buffer-name "*Music*")
  (add-to-list 'display-buffer-alist '((or (derived-mode . emms-playlist-mode)
                                           (derived-mode . emms-browser-mode))
                                       (display-buffer-in-tab)
                                       (tab-name "Media") (tab-group "Media")))

  (defun my/toggle-emms (arg)
    "Toggle Emms playback: start if stopped, stop if playing.
With universal argument (C-u), pause playback instead of stopping."
    (interactive "P")
    (if emms-player-playing-p
        (if arg
            (emms-stop)
          (emms-pause))
      (emms-start))))

(use-package emms-playlist-mode
  :after emms
  :config
  (setq emms-playlist-mode-center-when-go t))

(use-package emms-source-file
  :after emms
  :config
  (setq emms-source-playlist-default-format 'native)
  (setq emms-source-playlist-ask-before-overwrite nil)

  (setq emms-source-file-default-directory (expand-file-name "~/Music/")))

(use-package emms-history
  :hook ((emms-browser-show-display . emms-history-load)
         (emms-browser-hide-display . emms-history-save)))

(use-package emms-setup
  :after emms
  :config
  (emms-all))

(use-package emms-browser
  :after emms
  :config
  (setq emms-browser-thumbnail-small-size 64)
  (setq emms-browser-thumbnail-medium-size 128)

  (evil-define-key 'normal emms-browser-mode-map
    "gb" nil))

(use-package emms-lyrics
  :hook (emms-player-started-hook . emms-lyrics-toggle-display-on-modeline))
(use-package lyrics-fetcher
  :after (emms)
  :config
  (setq lyrics-fetcher-genius-access-token
        (auth-source-pick-first-password :host "genius.com" :user "ID"))
  (lyrics-fetcher-use-backend 'neteasecloud))
(use-package consult-emms
  :bind ("M-<f5>" . consult-emms-library))

1. 使用基本流程如下:

  • f5 调用 emms ,回车即可。 会默认打开 "Music" 这个 buffer。
  • 移动光标到欲播放的音乐上按 RET ,开始播放音乐。
  • Music buffer 是一个播放列表,可以通过 M-f5 增加歌曲到该列表中。
  • Music 中可以使用 C-x C-s 保存播放列表到指定的文件当中。 再次启动时可默认加载该文件。
  • C-f5 开始播放或暂停音乐, C-u C-f5 可停止播放音乐。

Created with Emacs 29.1.50 (Org mode 9.6.8) on MacOS Updated: 2023-04-19 Wed 10:38